(*************************************************** Ant Movie Catalog importation script www.antp.be/software/moviecatalog/ [Infos] Authors=Yuri Vlasov (wildfish@mail.ru) Title=alldvd.ru Description=Import data & picture from ALLDVD.RU Site=alldvd.ru Language=RU Version=1.0 (08.02.2005) Requires=3.5.0 Comments= License= GetInfo=1 [Options] ***************************************************) program alldvd_ru; const BaseAddress = 'http://alldvd.ru/php/'; var MovieName: string; //============================================================================== procedure AnalyzePage(Address: string); var Page: TStringList; LineNr: Integer; Line: string; TextBlock: string; BeginPos, EndPos: Integer; s: string; begin Page := TStringList.Create; Page.Text := GetPage(Address); if pos('РЕЗУЛЬТАТ ПОИСКА', Page.Text) = 0 then begin //URL if CanSetField(fieldURL) then SetField(fieldURL, Address); AnalyzeVideoPage(Page); end else begin PickTreeClear; LineNr := FindLine('
', Page, 0); if LineNr > -1 then begin PickTreeAdd('Результаты поиска "'+MovieName+'"', ''); AddMoviesTitles(Page, LineNr); end; LineNr := FindLine('[1-10]    [11-20]', Line); s := Copy(Line, BeginPos, EndPos - BeginPos); // PickTreeMoreLink(BaseAddress + s); PickTreeMoreLink('http://alldvd.ru/php/content.php?group=namedvd&slovo=' + UrlEncode(MovieName) + '&code1=0&page=1'); end; if PickTreeExec(Address) then AnalyzePage(Address); end; Page.Free; end; //============================================================================== function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer; var i: Integer; begin Result := -1; if StartAt < 0 then StartAt := 0; for i := StartAt to List.Count-1 do if Pos(AnsiUpperCase(Pattern), AnsiUpperCase(List.GetString(i))) <> 0 then begin result := i; Break; end; end; //============================================================================== procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer); var Line: string; MovieTitle, MovieAddress, s: string; StartPos, EndPos: Integer; begin repeat Line := Page.GetString(LineNr); s := '
'; StartPos := Pos(s, Line); if StartPos > 0 then begin Delete (Line, 1, StartPos + Length(s) - 1); MovieTitle := Copy(Line, 1, Pos('', Line)); s := '<', Line)-1); HTMLDecode(MovieTitle); HTMLRemoveTags(MovieTitle); PickTreeAdd(MovieTitle, BaseAddress + MovieAddress); end; end; LineNr := LineNr + 1; until LineNr > Page.Count; end; //============================================================================== function GetText (Line: string; sBegin, sEnd: string): string; var BeginPos, EndPos: Integer; s: string; begin Result := ''; BeginPos := Pos(sBegin, Line) + Length(sBegin); EndPos := Pos(sEnd, Line); if (BeginPos = 0) then BeginPos := 1; if (EndPos = 0) then EndPos := Length(Line); s := Copy(Line, BeginPos, EndPos - BeginPos); HTMLDecode(s); HTMLRemoveTags(s); Result := Trim(s); end; //============================================================================== procedure AnalyzeVideoPage(Page: TStringList); var Line, Value, Value2, FullValue: string; LineNr, MovieLength: Integer; BeginPos, EndPos: Integer; MovieName, s, sResult: string; begin s := 'DVD интернет-магазин - DVD-диск: '; LineNr := FindLine(s, Page, 0); if LineNr = -1 then exit; // Title Line := Page.GetString(LineNr); Delete(Line, 1, Pos(s, Line) + Length(s) - 1); EndPos := Pos('rus', Line); if EndPos = 0 then EndPos := Pos(' / ', Line); if EndPos = 0 then EndPos := Length(Line);; s := Copy(Line, BeginPos, EndPos - BeginPos - 1); HTMLDecode(s); HTMLRemoveTags(s); s := Trim(s); MovieName := s; if CanSetField(fieldTranslatedTitle) then SetField(fieldTranslatedTitle, MovieName); //Original Title if CanSetField(fieldOriginalTitle) then begin Delete(Line, 1, Length(MovieName) - 1); BeginPos := Pos('rus', Line) + 3; EndPos := Pos(' / ', Line) + 3; if BeginPos < EndPos then BeginPos := EndPos; s := Copy(Line, BeginPos, Pos('', Line)); HTMLDecode(s); HTMLRemoveTags(s); s := Trim(s); SetField(fieldOriginalTitle, s); end; //Actors if CanSetField(fieldActors) then begin s := 'В ролях:'; LineNr := FindLine(s, Page, 0); if LineNr <> -1 then begin Line := Page.GetString(LineNr); BeginPos := Pos(s, Line) + Length(s) - 1; Delete(Line, 1, BeginPos); EndPos := Pos('Режиссеры:', Line)-1; if EndPos = 0 then EndPos := Length(Line); s := Copy(Line, 1, EndPos); s := StringReplace(s, '', ','); HTMLDecode(s); HTMLRemoveTags(s); s := Trim(s); Delete(s, Length(s), Length(s)); SetField(fieldActors, s); end; end; //Director if CanSetField(fieldDirector) then begin s := 'Режиссеры:'; LineNr := FindLine(s, Page, 0); if LineNr <> -1 then begin Line := Page.GetString(LineNr); BeginPos := Pos(s, Line) + Length(s) - 1; Delete(Line, 1, BeginPos); EndPos := Pos('Жанр:', Line)-1; if EndPos = 0 then EndPos := Length(Line); s := Copy(Line, 1, EndPos); s := StringReplace(s, '', ','); HTMLDecode(s); HTMLRemoveTags(s); s := Trim(s); if Pos(',', s) = Length(s) then Delete(s, Length(s), Length(s)); SetField(fieldDirector, s); end; end; //Category if CanSetField(fieldCategory) then begin s := 'Жанр:'; LineNr := FindLine(s, Page, 0); if LineNr <> -1 then begin Line := Page.GetString(LineNr); BeginPos := Pos(s, Line) + Length(s) - 1; Delete(Line, 1, BeginPos); s := Copy(Line, 1, Length(Line)); sResult := s; LineNr := LineNr + 1; Line := Page.GetString(LineNr); while (Pos('
', Line) = 0) do begin sResult := sResult + ',' + Line; LineNr := LineNr + 1; Line := Page.GetString(LineNr); end; HTMLDecode(sResult); HTMLRemoveTags(sResult); sResult := Trim(sResult); SetField(fieldCategory, sResult); end; end; //fieldLanguages if CanSetField(fieldLanguages) then begin s := 'Язык и стандарт звука:'; LineNr := FindLine(s, Page, 0); if LineNr <> -1 then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); sResult := ''; while (Pos('Тип диска:', Line)=0) do begin EndPos := Pos(' - ', Line)-1; s := Copy(Line, 1, EndPos); if sResult = '' then sResult := sResult + s else sResult := sResult + ', ' + s; LineNr := LineNr + 1; Line := Page.GetString(LineNr); end; HTMLDecode(sResult); HTMLRemoveTags(sResult); sResult := Trim(sResult); SetField(fieldLanguages, sResult); end; end; //fieldSubtitles if CanSetField(fieldSubtitles) then begin s := 'Язык субтитров:'; LineNr := FindLine(s, Page, 0); if LineNr <> -1 then begin Line := Page.GetString(LineNr); BeginPos := Pos(s, Line) + Length(s) - 1; Delete(Line, 1, BeginPos); s := Copy(Line, 1, Length(Line)); sResult := s; LineNr := LineNr + 1; Line := Page.GetString(LineNr); while (Pos('
', Line) = 0) do begin sResult := sResult + ', ' + s; LineNr := LineNr + 1; Line := Page.GetString(LineNr); end; HTMLDecode(sResult); HTMLRemoveTags(sResult); sResult := Trim(sResult); SetField(fieldSubtitles, sResult); end; end; //fieldLength if CanSetField(fieldLength) then begin s := 'Длительность диска:'; LineNr := FindLine(s, Page, 0); if LineNr <> -1 then begin Line := Page.GetString(LineNr); BeginPos := Pos(s, Line) + Length(s) - 1; Delete(Line, 1, BeginPos); EndPos := Pos('мин.', Line)-1; if EndPos = 0 then EndPos := Length(Line); s := Copy(Line, 1, EndPos); HTMLDecode(s); HTMLRemoveTags(s); s := Trim(s); SetField(fieldLength, s); end; end; //fieldDescription if CanSetField(fieldDescription) then begin s := 'Коротко о фильме'; LineNr := FindLine(s, Page, 0); if LineNr <> -1 then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); sResult := ''; while (Pos('', Line)=0) do begin sResult := sResult + Line; LineNr := LineNr + 1; Line := Page.GetString(LineNr); end; sResult := StringReplace(sResult, '
',#13#10); sResult := StringReplace(sResult, '
',#13#10); HTMLDecode(sResult); HTMLRemoveTags(sResult); SetField(fieldDescription, sResult); end; end; //Picture if CanSetPicture then begin LineNr := FindLine('
', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr+1); s := '